计数信号量常用于事件同步、资源管理,是唯一能够实现并发事件同步的手段。
更多...
计数信号量常用于事件同步、资源管理,是唯一能够实现并发事件同步的手段。
| #define uCreateSem |
( |
|
sem, |
|
|
|
init, |
|
|
|
max |
|
) |
| sCSV_CreateSem(sem, init, max) |
创建计数信号量
- 参数
-
| [in] | sem | 计数信号量名称 |
| [in] | init | 计数信号量初始值 |
| [in] | max | 计数信号量最大值 |
- 返回
- 无
在文件 ur_api.h 第 930 行定义.
| #define uExternSem |
( |
|
sem | ) |
sCSV_ExternSem(sem) |
| #define uGiveSem |
( |
|
sem | ) |
sUSV_GiveSem(sem) |
| #define uTakeSem |
( |
|
sem, |
|
|
|
tc |
|
) |
| sUSV_TakeSem(sem, tc) |
获取计数信号量
- 参数
-
| [in] | sem | 计数信号量名称 |
| [in] | tc | 滴答周期(超时时间)
+0:立即返回
~0:无限等待 |
- 返回
- 结果(bool)
- 返回值
-
- 注解
- 同型服务:
tTakeSem(sem)。
- 警告
- 任务中获取,不支持在临界区中,包括任务临界区、服务层临界区、全局临界区,或关闭总中断时调用。
-
当用于资源同步时(互斥访问),当tc为~0时(无限等待),仍建议用户查询返回值,原因是
当在多个相同优先级的任务中获取同一个计数信号量时(采用时间片轮转调度),其返回结果仍然有失败的可能。
在文件 ur_api.h 第 957 行定义.